---
sidebar_position: 4
---

# Указания по выполнению работы

1. Для определения иерархии классов связать отношением наследования классы, приведенные в приложении (для [заданного варианта](TaskVariants.md)). Из перечисленных классов выбрать один, который будет стоять во главе иерархии. Это абстрактный класс.
2. Определить в классах все необходимые конструкторы и деструкторы. Не забыть в абстрактном классе определить виртуальный деструктор.
3. Компонентные данные класса специфицировать как `protected`.
4. Пример определения статических компонентов:

    ```cpp
    static person* begin: // указатель на начало списка
    static void print(void); // просмотр списка
    ```

   Статические компоненты класса необходимо определить в абстрактном классе.

5. Статическую компоненту - данное инициализировать вне определения класса, в глобальной области. Также в конце выполнения программы необходимо освободить память, выделенную на статические компоненты.
6. Для добавления объекта в список предусмотреть метод класса, т.е. объект сам добавляет себя в список (см. статические компоненты абстрактного класса). Например, `a.Add()` — объект `а` добавляет себя в список.

   Включение объекта в список можно выполнять при создании объекта. т.е. поместить операторы включения в конструктор. В случае иерархии классов, включение объекта в список должен выполнять только конструктор базового класса. Вы должны продемонстрировать оба этих способа.

   Необходимо предусмотреть изменения размера динамического массива, который выполняет роль списка.

7. Список просматривать путем вызова виртуального метода `Show` каждого объекта.
8. Статический метод просмотра списка вызывать не через объект, а через класс.
9. Определение классов, их реализацию, демонстрационную программу поместить в отдельные файлы. Данные файлы должны быть упакованы в отдельную статическую статическую библиотеку.
